/**
 * 
 */
package br.com.ac.fatureweb.view;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.event.ActionEvent;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

import br.com.ac.fatureweb.enums.EnumStatusCarga;
import br.com.ac.fatureweb.model.Carga;
import br.com.ac.fatureweb.model.Equipamento;
import br.com.ac.fatureweb.model.Roteiro;
import br.com.ac.fatureweb.service.NgcRoteiroBean;
import br.com.ac.fatureweb.utilitary.CrudDefaultBean;
import br.com.ac.fatureweb.utilitary.EnumStatusManaged;
import br.com.ac.fatureweb.utilitary.FacesUtils;
import br.com.ac.fatureweb.utilitary.Order;

/**
 * @author aldivone
 *
 */
@Named
@ViewScoped
public class RoteiroBean extends CrudDefaultBean<Roteiro, NgcRoteiroBean> {

	/**
	 * 
	 */
	private static final long serialVersionUID = -7421372403974550502L;

	private Carga carga;

	@Inject
	private NgcRoteiroBean ngcRoteiroBean;

	public RoteiroBean() {
		super();
		addOrder("numero", Order.ASC);
	}

	@PostConstruct
	public void inicialize() {
		setService(ngcRoteiroBean);
	}

	public List<Carga> getLstCarga() {
		return ngcRoteiroBean.getLstCarga(EnumStatusCarga.DISPONIVEL);
	}

	@Override
	public void persist(ActionEvent event) {
		gerarRoteiro(event);
	}

	public void gerarRoteiro(ActionEvent event) {
		if (carga == null) {
			FacesUtils
					.addMessageError("A carga para divisão não foi informada."
							+ " Favor selecionar uma na tabela.");
			return;
		}

		ngcRoteiroBean.gerarRoteiro(getCarga().getId(), getEntity()
				.getQtdLeiturista(), getEntity().getDataFaturamento());

		setCurrentState(EnumStatusManaged.CONSULTAR);
	}

	@Override
	protected void runAfterCallingService() {

		if (EnumStatusManaged.VISUALIZAR.equals(getCurrentState())) {
			Roteiro roteiro = ngcRoteiroBean.getRoteiro(getEntity().getId());

			setEntity(roteiro);
		}
	}

	/**
	 * @return the carga
	 */
	public Carga getCarga() {
		return carga;
	}

	/**
	 * @param carga
	 *            the carga to set
	 */
	public void setCarga(Carga carga) {
		this.carga = carga;
	}

	/**
	 * @return the lstEquipamento
	 */
	public List<Equipamento> getLstEquipamento() {
		return ngcRoteiroBean.getLstEquipamento();
	}

}
